
package structure;

import java.util.ArrayList;
import java.util.Iterator;

import arbre.ArbreBinaire;

/**
 * Implémentation de datacenter avec un arber binaire.
 * 
 * @author David Bernard
 * @since java 1.7
 */
public class ArbreDataCenter extends AbstractDataCenter
{
	private ArbreBinaire<DataKey> arbre = null;

	/**
	 * Instancie un nouveau ArbreBinaire.
	 */
	public ArbreDataCenter()
	{
		this.arbre = new ArbreBinaire<DataKey>();
	}

	@Override
	public Iterator<DataNode> iterator()
	{
		ArrayList<DataNode> list = new ArrayList<DataNode>();
		Iterator<DataKey> ite = this.arbre.values().iterator();
		
		while(ite.hasNext())
		{
			list.add((DataNode) ite.next());
		}
		
		return list.iterator();
	}

	@Override
	public int size()
	{
		return this.arbre.size();
	}

	@Override
	protected void setElement(DataNode node)
	{
		this.arbre.set(node.createNode());
	}

	@Override
	protected DataNode getElement(DataKey cle)
	{
		DataKey dk = this.arbre.get(cle);
		DataNode buffer = null;
		DataNode out = new DataNode();

		if (dk != null)
		{
			buffer = (DataNode) dk;
			out.setContenu(buffer.getContenu());

		}

		return out;
	}

	@Override
	protected void removeElement(DataKey cle)
	{
		this.arbre.removeElement(cle.createKey());
	}

	@Override
	public void removeAllData()
	{
		this.arbre.removeAll();
	}
	
	@Override
	public void Ouvrir(String nomFichier)
	{
		super.Ouvrir(nomFichier);
		this.arbre.rebalancer();
	}
}
